<?php
class Grupo {
	public $idGrupo;
	public $idCurso 	= null;
	public $idAtividade = null;
	public $nome = 'bla';
	
	public $grupoPadrao = true;

	public $alunos;
	
	public function __construct($idGrupo, $params = null) {
		if($params == null){
			$strQuery 	= "SELECT * FROM grupos WHERE id = $idGrupo";
			$result 	= BancoDados::query($strQuery);
			$params 	= $result;
		}
		if(is_array($params)) {
			extract($params);
			
			$this->idGrupo 		= $idGrupo;
			$this->idCurso 		= $idCurso;
			$this->idAtividade 	= $idAtividade;
			$this->nome 		= $nome;
			
			if(is_numeric($idAtividade) && $idAtividade != 0){
				$grupoPadrao = false;
			} else {
				$grupoPadrao = true;
			}

			$strQuery 		= "SELECT * FROM usuarios u, gruposUsuarios gu WHERE gu.idUsuario = u.idUsuario AND gu.idGrupo = $idGrupo";
			$this->alunos 	= BancoDados::query($strQuery);
		}
	}
	
	static function getGrupos($idCurso, $idAtividade = null){
		$strQuery =	$idAtividade ?
					"SELECT * FROM grupos WHERE idAtividade = $idAtividade" :
					"SELECT * FROM grupos WHERE idCurso = $idCurso AND idAtividade = ''" ;
		
		$arrGrupos = BancoDados::query($strQuery);
		if (is_array($arrGrupos)) {
			$grupos = array();
			foreach($arrGrupos as $params) {
				array_push($grupos, NEW Grupo(null, $params));
			}
			return $grupos;
		}
		return false;
	}
	
	static function getAlunosSemGrupo($curso, $idAtividade = null){
		$idCurso = $curso->getIdCurso();
		
		//Aqui eu pego todos os ids de todos os usuários que estão em grupos dentro dessa atividade ou curso
		$strQuery  = "	SELECT gu.idUsuario FROM grupos g LEFT JOIN gruposUsuarios gu ON g.idGrupo = gu.idGrupo ";
		$strQuery .=	$idAtividade ?
					"	WHERE idAtividade = $idAtividade" :
					"	WHERE idCurso = $idCurso AND idAtividade = ''" ;	
		$result = BancoDados::query($strQuery);
		$idsAlunosComGrupos = array();
		foreach($result as $linha){
			$idsAlunosComGrupos[] = $linha['idUsuario'];			
		}
		//-------------------------------------------------------------------------------------------------
		
		$participantes = $curso->getAlunos();
		$alunos = $participantes['alunos'];
		
		$alunosSemGrupo = array();
		
		//foreach para cada aluno de todo o curso
		foreach($alunos as $aluno){
			//se esse aluno não estiver na lista de alunos que já tem grupos:
			if(!in_array($aluno['idUsuario'], $idsAlunosComGrupos)) {
				$alunosSemGrupo[] = $aluno; //coloca ele no array para retornar
			}
		}
		
		return $alunosSemGrupo;
	}
	
	
	public function setaAlunos($arrIds){
		//remove todos os alunos do grupo e insere os que estão na lista.
		
		if (!(is_array($arrIds) && count($arrIds) > 0)) {
			trigger_error("Parametro inválido passado para a função inserir alunos no grupo!");
			return false;
		}
		
		$this->esvaziaGrupo();
		
		//TODO pegar se o aluno é aluno ou tutor!!
		
		foreach ($arrIds as $key => $id)
		{
			if(!is_numeric($id)) return false;
			$query = "INSERT INTO gruposUsuarios VALUES(".$this->idGrupo.", $id, 'aluno'); \n";
			if (BancoDados::query($query, null, true) === false) {
				trigger_error("Erro na execução da query que insere alunos no grupo.");
				return false;
			}
		}
		
	}
	
	public function esvaziaGrupo(){
		$query 	 = "DELETE FROM gruposUsuarios WHERE idGrupo = ".$this->idGrupo.";";
		if (!BancoDados::query($query)) {
			trigger_error("Erro na execução da query que remove lista de alunos do grupo.");
			return false;
		}
		return true;
	}
	
	public function removeAlunos($arrIds){
		if (sizeof($arrIds) > 0){
			$cond 	 = "idUsuario = " . $arrIds[0];
			if (sizeof($arrIds) > 1){
				array_shift($arrIds);
				$cond .= implode(" OR idUsuario = ", $arrIds);
			}
			$query 	 = "DELETE FROM gruposUsuarios WHERE idGrupo = ".$this->idGrupo." AND ($cond);";
			if (!BancoDados::query($query)) {
				trigger_error("Erro na execução da query que remove lista de alunos do grupo.");
			}
		}else{
			trigger_error("Parametro passado ao remover alunos inválido!");
		}
	}
	
	public function getAlunos(){
		$strQuery =	"SELECT * FROM gruposAlunos WHERE idGrupo = " . $idGrupo . "AND tipo = 'aluno'";
		if (is_array($resultado = BancoDados::query($strQuery))) {
			$this->idsAlunos = $resultado['0']['idUsuario'];
		}
	}
	
	public static function exportar($idCurso, $idAtividade){
		$gruposCurso = self::getGrupos($idCurso);
		foreach($gruposCurso as $grupoCurso){		
			self::inserir(null, $idAtividade, $grupoCurso['nome']);
			//TODO retornar o id do grupo recém inserido e colocar os alunos de $grupo lá.
		}
	}
	
	public static function inserir($idCurso, $idAtividade, $strNome) {
		//TODO validação (testar se o nome já existe)
		$strQuery	=	"INSERT INTO grupos VALUES (default, $idCurso, $idAtividade, '$strNome', NOW(), NOW())";
		if(!BancoDados::query($strQuery)){
			return false;
		}
		return true;
	}
	
	public static function editar($idGrupo, $strNome) {
		if (Grupo::validar($idGrupo, true, null, null, false, $strNome, true)) {
			$strQuery	=	"UPDATE grupos SET nome = '" . $strNome . "' WHERE idGrupo = " . $idGrupo;
			if(!BancoDados::query($strQuery)){
				return false;
			}
			return true;
		}
		else {
			echo 'erro na validação escrota!';
			return false;
		}
	}
	
	public static function excluir($idGrupo) {
		$query 	 	= "DELETE FROM gruposUsuarios WHERE idGrupo = " . $idGrupo;
		if (!BancoDados::query($query)) {
			trigger_error("Erro na execução da query que remove lista de alunos do grupo recem excluido.");
			return false;
		}
		$strQuery	=	"DELETE FROM grupos WHERE idGrupo = " . $idGrupo;
		if (!BancoDados::query($strQuery)) {
			trigger_error("Erro na execução da query que deleta o grupo.");
			return false;
		}
		return true;
	}
	
	public static function validar($idGrupo, $validarIdGrupo, $idTurma, $idCurso, $validarIdTurma, $strNome, $validarNome) {
		$valida	=	true;
		if ($validarNome && (!validaAlfaNumerico($strNome, constant('__TAM_NOME_GRUPO__')) || $strNome == '')) {
			adicionaMensagem(texto('MENSAGEM_ERRO_VALIDACAO_CAMPO_INPUT', array(texto('DADOS_NOME'))), 'erro');
			$valida	=	false;
		}
		if ($validarIdTurma) {
			$curso	=	new Curso($idCurso);
			$turmas	=	$curso->getTurmasBusca(false);
			if ($turmas['qtdResultadosTotal'] > 0 && !validaNumero($idTurma)) {
				adicionaMensagem(texto('MENSAGEM_ERRO_VALIDACAO_CAMPO_INPUT', array(texto('DADOS_TURMA'))), 'erro');
				$valida	=	false;
			}
		}
		
	
		if ($validarIdGrupo && !validaNumero($idGrupo)) {
			adicionaMensagem(texto('MENSAGEM_ERRO_INSERIR_GRUPO'), 'erro');
			$valida	=	false;
		}
		return $valida;
	}
	
 	/**
     * Returns $idTurma.
     * @see Curso::$idTurma
     */
    public function getIdCurso()
    {
        return $this->idCurso;
    }
    
    /**
     * Sets $idTurma.
     * @param object $idTurma
     * @see Curso::$idTurma
     */
    public function setIdCurso($idTurma)
    {
        $this->idCurso = $idCurso;
    }
    
	/**
     * Returns $idGrupo.
     * @see Curso::$idGrupo
     */
    public function getIdGrupo()
    {
        return $this->idGrupo;
    }
    
    /**
     * Sets $idGrupo.
     * @param object $idGrupo
     * @see Curso::$idGrupo
     */
    public function setIdGrupo($idGrupo)
    {
        $this->idGrupo = $idGrupo;
    }
    
	/**
     * Returns $nome.
     * @see Curso::$nome
     */
    public function getNome()
    {
        return $this->nome;
    }
    
    /**
     * Sets $nome.
     * @param object $nome
     * @see Curso::$nome
     */
    public function setNome($nome)
    {
        $this->nome = $nome;
    }
}
 
?>